home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Multimedia / Movie3.0 / Source / xanim / xanim_iff.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-02  |  7.2 KB  |  264 lines

  1.  
  2. /*
  3.  * xanim_iff.h
  4.  *
  5.  * Copyright (C) 1990,1991,1992,1993,1994 by Mark Podlipec. 
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified and redistributed without
  9.  * fee for non-commerical purposes provided that this copyright notice is
  10.  * preserved intact on all copies and modified copies.
  11.  * 
  12.  * There is no warranty or other guarantee of fitness of this software.
  13.  * It is provided solely "as is". The author(s) disclaim(s) all
  14.  * responsibility and liability with respect to this software's usage
  15.  * or its effect upon hardware or computer systems.
  16.  *
  17.  */
  18.  
  19. typedef struct 
  20. {
  21.  LONG id;
  22.  LONG size;
  23. } Chunk_Header;
  24.  
  25. /* Graphic Stuff */
  26. #define ANHD 0x414e4844
  27. #define ANIM 0x414e494d
  28. #define ANSQ 0x414e5351
  29. #define BMHD 0x424d4844
  30. #define BODY 0x424f4459
  31. #define TINY 0x54494E59
  32. #define CAMG 0x43414d47
  33. #define CMAP 0x434d4150
  34. #define CRNG 0x43524e47
  35. #define DLTA 0x444c5441
  36. #define DPAN 0x4450414e
  37. #define DPPS 0x44505053
  38. #define DPPV 0x44505056
  39. #define DRNG 0x44524e47
  40. #define FORM 0x464f524d
  41. #define GRAB 0x47524142
  42. #define ILBM 0x494c424d
  43. #define IMRT 0x494d5254
  44. #define DPI  0x44504920
  45. #define ANFI 0x414e4649
  46.  
  47. /* Grouping Stuff */
  48. #define LIST 0x4c495354
  49. #define PROP 0x50524f50
  50. #define FACE 0x46414345
  51.  
  52. /* Sound stuff */
  53. #define VHDR 0x56484452
  54. #define ANNO 0x414e4e4f
  55. #define CHAN 0x4348414e
  56.  
  57.  
  58. typedef struct
  59. {
  60.  UWORD width, height;
  61.  WORD x, y;
  62.  UBYTE depth;
  63.  UBYTE masking;
  64.  UBYTE compression;
  65.  UBYTE pad1;
  66.  UWORD transparentColor;
  67.  UBYTE xAspect, yAspect;
  68.  WORD pageWidth, pageHeight;
  69. } Bit_Map_Header;
  70.  
  71. #define BMHD_COMP_NONE 0L
  72. #define BMHD_COMP_BYTERUN 1L
  73.  
  74. #define BMHD_MSK_NONE 0L
  75. #define BMHD_MSK_HAS 1L
  76. #define BMHD_MSK_TRANS 2L
  77. #define BMHD_MSK_LASSO 3L
  78.  
  79. #define mskNone                 0
  80. #define mskHasMask              1
  81. #define mskHasTransparentColor  2
  82. #define mskLasso                3
  83.  
  84. #define cmpNone      0
  85. #define cmpByteRun1  1
  86.  
  87. /* Aspect ratios: The proper fraction xAspect/yAspect represents the pixel
  88.  * aspect ratio pixel_width/pixel_height.
  89.  *
  90.  * For the 4 Amiga display modes:
  91.  *   320 x 200: 10/11  (these pixels are taller than they are wide)
  92.  *   320 x 400: 20/11
  93.  *   640 x 200:  5/11
  94.  *   640 x 400: 10/11      */
  95. #define x320x200Aspect 10
  96. #define y320x200Aspect 11
  97. #define x320x400Aspect 20
  98. #define y320x400Aspect 11
  99. #define x640x200Aspect  5
  100. #define y640x200Aspect 11
  101. #define x640x400Aspect 10
  102. #define y640x400Aspect 11
  103.  
  104. /* CRNG Stuff */
  105. #define IFF_CRNG_ACTIVE   1
  106. #define IFF_CRNG_REVERSE  2
  107. /* 16384 * 16.6667 ms */
  108. #define IFF_CRNG_INTERVAL (273065)
  109. #define IFF_CRNG_HDR_SIZE 8
  110. #define IFF_CRNG_DPII_KLUDGE 36
  111.  
  112. /* CAMG Stuff */
  113. #define IFF_CAMG_NOP   0x00000001
  114. #define IFF_CAMG_EHB   0x00000080
  115. #define IFF_CAMG_HAM   0x00000800
  116. #define IFF_CAMG_LACE  0x00004000
  117.  
  118. typedef struct
  119. {
  120.  UWORD width,height;
  121.  WORD x, y;
  122.  WORD xoff, yoff;
  123. } Face_Header;
  124.  
  125. typedef struct 
  126. {
  127.  LONG id;
  128.  LONG size;
  129.  LONG subid;
  130. } Group_Header;
  131.  
  132. typedef struct 
  133. {
  134.  LONG id;
  135.  LONG size;
  136.  LONG subid;
  137.  UBYTE grpData[ 1 ];
  138. } Group_Chunk;
  139.  
  140. typedef struct
  141. {
  142.  UBYTE op;
  143.  UBYTE mask;
  144.  UWORD w,h;
  145.  UWORD x,y;
  146.  ULONG abstime;
  147.  ULONG reltime;
  148.  UBYTE interleave;
  149.  UBYTE pad0;
  150.  ULONG bits;
  151.  UBYTE pad[16];
  152. } Anim_Header;
  153. #define Anim_Header_SIZE 40
  154. #define IFF_ANHD_LDATA  0x0001
  155. #define IFF_ANHD_XOR    0x0002
  156. #define IFF_ANHD_1LIST  0x0002
  157. #define IFF_ANHD_RLC    0x0008
  158. #define IFF_ANHD_VERT   0x0010
  159. #define IFF_ANHD_LIOFF  0x0020
  160.  
  161. typedef struct
  162. {
  163.  LONG minx;
  164.  LONG miny;
  165.  LONG maxx;
  166.  LONG maxy;
  167. } IFF_DLTA_HDR;
  168.  
  169. typedef struct
  170. {
  171.   ULONG dnum;
  172.   ULONG time;
  173.   ULONG frame;
  174. } IFF_ANSQ;
  175.  
  176. typedef struct IFF_ACT_LST_STRUCT
  177. {
  178.   ULONG type;
  179.   XA_ACTION *act;
  180.   struct IFF_ACT_LST_STRUCT *next;
  181. } IFF_ACT_LST;
  182.  
  183. typedef struct
  184. {
  185.   ULONG cnt;
  186.   ULONG frame;
  187.   IFF_ACT_LST *start;
  188.   IFF_ACT_LST *end;
  189. } IFF_DLTA_TABLE;
  190.  
  191. extern ULONG IFF_Read_File();
  192. extern ULONG IFF_Delta3();
  193. extern ULONG IFF_Delta5();
  194. extern ULONG IFF_Delta7();
  195. extern ULONG IFF_Deltal();
  196. extern ULONG IFF_DeltaJ();
  197. extern LONG Is_IFF_File();
  198. extern LONG UnPackRow();
  199.  
  200. /* POD NOTE: further optimization would be to have
  201.  * IFF_Byte_Mod and IFF_Byte_Mod_with_XOR_flag
  202.  */
  203. #define IFF_Byte_Mod(ptr,data,dmask,xorflag) { register UBYTE *_iptr = ptr; \
  204. if (xorflag) { \
  205.   if (0x80 & data) *_iptr++ ^= dmask; else _iptr++; \
  206.   if (0x40 & data) *_iptr++ ^= dmask; else _iptr++; \
  207.   if (0x20 & data) *_iptr++ ^= dmask; else _iptr++; \
  208.   if (0x10 & data) *_iptr++ ^= dmask; else _iptr++; \
  209.   if (0x08 & data) *_iptr++ ^= dmask; else _iptr++; \
  210.   if (0x04 & data) *_iptr++ ^= dmask; else _iptr++; \
  211.   if (0x02 & data) *_iptr++ ^= dmask; else _iptr++; \
  212.   if (0x01 & data) *_iptr   ^= dmask; \
  213. } else { \
  214.   register UBYTE dmaskoff = ~dmask; \
  215.   if (0x80 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  216.   if (0x40 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  217.   if (0x20 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  218.   if (0x10 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  219.   if (0x08 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  220.   if (0x04 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  221.   if (0x02 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  222.   if (0x01 & data) *_iptr   |= dmask; else *_iptr    &= dmaskoff; \
  223. } }
  224.  
  225.  
  226. #define IFF_Short_Mod(ptr,data,dmask,xorflag) { register UBYTE *_iptr = ptr; \
  227. if (xorflag) { \
  228.   if (0x8000 & data) *_iptr++  ^= dmask; else _iptr++; \
  229.   if (0x4000 & data) *_iptr++  ^= dmask; else _iptr++; \
  230.   if (0x2000 & data) *_iptr++  ^= dmask; else _iptr++; \
  231.   if (0x1000 & data) *_iptr++  ^= dmask; else _iptr++; \
  232.   if (0x0800 & data) *_iptr++  ^= dmask; else _iptr++; \
  233.   if (0x0400 & data) *_iptr++  ^= dmask; else _iptr++; \
  234.   if (0x0200 & data) *_iptr++  ^= dmask; else _iptr++; \
  235.   if (0x0100 & data) *_iptr++  ^= dmask; else _iptr++; \
  236.   if (0x0080 & data) *_iptr++  ^= dmask; else _iptr++; \
  237.   if (0x0040 & data) *_iptr++  ^= dmask; else _iptr++; \
  238.   if (0x0020 & data) *_iptr++   ^= dmask; else _iptr++; \
  239.   if (0x0010 & data) *_iptr++   ^= dmask; else _iptr++; \
  240.   if (0x0008 & data) *_iptr++   ^= dmask; else _iptr++; \
  241.   if (0x0004 & data) *_iptr++   ^= dmask; else _iptr++; \
  242.   if (0x0002 & data) *_iptr++   ^= dmask; else _iptr++; \
  243.   if (0x0001 & data) *_iptr     ^= dmask; \
  244. } else { \
  245.   register UBYTE dmaskoff = ~dmask; \
  246.   if (0x8000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  247.   if (0x4000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  248.   if (0x2000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  249.   if (0x1000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  250.   if (0x0800 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  251.   if (0x0400 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  252.   if (0x0200 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  253.   if (0x0100 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  254.   if (0x0080 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  255.   if (0x0040 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  256.   if (0x0020 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  257.   if (0x0010 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  258.   if (0x0008 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  259.   if (0x0004 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  260.   if (0x0002 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  261.   if (0x0001 & data) *_iptr     |= dmask; else *_iptr     &= dmaskoff; \
  262. } }
  263.  
  264.